#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <queue>
#include <vector>
#include <string>
using namespace std;
//int main() {
//    string s;
//    string ret;
//    int flag = 0;
//    getline(cin, s);
//    ret.push_back(s[0]);
//    for (auto i : s)
//    {
//        if (flag == 1)
//        {
//            ret.push_back(toupper(i));
//            flag = 0;
//        }
//        if (i == ' ')
//        {
//            flag = 1;
//        }
//    }
//    cout << ret;
//    return 0;
//}
//
//int main() {
//    int num1 = 0, num2 = 0;
//    int ret = 0x3f3f3f3f;
//    int a = 0, b = 0;
//    cin >> num2 >> num1;
//    vector<int> v1(num2);
//    
//    for (int i = 0; i < num2; i++)
//    {
//        int j = 0;
//        cin >> j;
//        if (i == 0)
//        {
//            v1[i] = j;
//        }
//        else {
//            v1[i] = j + v1[i - 1];
//        }
//    }
//    int left = 0, right = 1;
//    while (right < v1.size())
//    {
//        if (v1[right] - v1[left] >= num1)
//        {
//            left++;
//        }
//        else
//        {
//            right++;
//        }
//        if (right -left<ret && v1[right] - v1[left] >= num1)
//        {
//            ret = right - left;
//            a = left;
//            b = right;
//        }
//    }
//
//    cout << a << ' ' << b;
//    return 0;
//}

int main() {
    int num = 0, k = 0;
    long long ret = 0;
    cin >> num >> k;
    priority_queue<int> q;
    while (num--)
    {
        int j = 0;
        cin >> j;
        q.push(j);
    }
    while (k--)
    {
        while (!q.empty()&&q.top() % 2 != 0)
        {
            ret += q.top();
            q.pop();
        }
        int l = q.top() / 2;
        q.pop();
        q.push(l);

    }
    while (!q.empty())
    {
        ret += q.top();
        q.pop();
    }
    cout << ret;
    return 0;
}